﻿2026-05-10T11:41:38.9808989Z ##[group]Run pnpm verify:phase-4
2026-05-10T11:41:38.9809389Z [36;1mpnpm verify:phase-4[0m
2026-05-10T11:41:38.9831240Z shell: /usr/bin/bash -e {0}
2026-05-10T11:41:38.9831498Z env:
2026-05-10T11:41:38.9831752Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-10T11:41:38.9832279Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-10T11:41:38.9832530Z ##[endgroup]
2026-05-10T11:41:39.3078451Z 
2026-05-10T11:41:39.3079513Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-10T11:41:39.3080710Z > node scripts/verify-phase-4.mjs
2026-05-10T11:41:39.3081287Z 
2026-05-10T11:41:39.3402089Z 
2026-05-10T11:41:39.3403334Z === Workspace: typecheck ===
2026-05-10T11:41:39.3403915Z >>> pnpm -r typecheck
2026-05-10T11:41:39.6835422Z Scope: 5 of 6 workspace projects
2026-05-10T11:41:39.6909306Z packages/db typecheck$ tsc --noEmit
2026-05-10T11:41:39.6910919Z packages/game-logic typecheck$ tsc --noEmit
2026-05-10T11:41:42.3558727Z packages/game-logic typecheck: Done
2026-05-10T11:41:42.3579301Z packages/protocol typecheck$ tsc --noEmit
2026-05-10T11:41:45.0417402Z packages/db typecheck: Done
2026-05-10T11:41:46.2816385Z packages/protocol typecheck: Done
2026-05-10T11:41:46.2824388Z apps/client typecheck$ tsc --noEmit
2026-05-10T11:41:46.2827566Z apps/server typecheck$ tsc --noEmit
2026-05-10T11:41:58.2264440Z apps/client typecheck: Done
2026-05-10T11:41:59.3772835Z apps/server typecheck: Done
2026-05-10T11:41:59.3884660Z 
2026-05-10T11:41:59.3885480Z === Lint: protocol-sync ===
2026-05-10T11:41:59.3886481Z >>> pnpm lint:protocol-sync
2026-05-10T11:41:59.7173472Z 
2026-05-10T11:41:59.7174604Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-10T11:41:59.7175906Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-10T11:41:59.7176599Z 
2026-05-10T11:41:59.7492813Z lint-protocol-sync: OK
2026-05-10T11:41:59.7627325Z 
2026-05-10T11:41:59.7628500Z === Lint: game-logic-purity ===
2026-05-10T11:41:59.7629490Z >>> pnpm lint:game-logic-purity
2026-05-10T11:42:00.0907473Z 
2026-05-10T11:42:00.0909132Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-10T11:42:00.0912328Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-10T11:42:00.0912788Z 
2026-05-10T11:42:00.1252581Z lint-game-logic-purity: OK (6 file(s) clean)
2026-05-10T11:42:00.1401599Z 
2026-05-10T11:42:00.1402687Z === Lint: better-auth-schema-sync ===
2026-05-10T11:42:00.1404164Z >>> pnpm lint:better-auth-schema-sync
2026-05-10T11:42:00.4683072Z 
2026-05-10T11:42:00.4684343Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-10T11:42:00.4686106Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-10T11:42:00.4686934Z 
2026-05-10T11:42:02.2361885Z lint-better-auth-schema-sync: OK
2026-05-10T11:42:02.2502033Z 
2026-05-10T11:42:02.2502870Z === Lint: rate-limit-budgets ===
2026-05-10T11:42:02.2503794Z >>> pnpm lint:rate-limit-budgets
2026-05-10T11:42:02.5755322Z 
2026-05-10T11:42:02.5756432Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-10T11:42:02.5757634Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-10T11:42:02.5758554Z 
2026-05-10T11:42:02.6081263Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-10T11:42:02.6218569Z 
2026-05-10T11:42:02.6219614Z === Lint: no-clipboard-rce ===
2026-05-10T11:42:02.6220556Z >>> pnpm lint:no-clipboard-rce
2026-05-10T11:42:02.9488698Z 
2026-05-10T11:42:02.9489764Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-10T11:42:02.9490970Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-10T11:42:02.9491646Z 
2026-05-10T11:42:02.9868741Z lint-no-clipboard-rce: OK (21 file(s) clean)
2026-05-10T11:42:03.0009646Z 
2026-05-10T11:42:03.0010685Z === Lint: room-layout ===
2026-05-10T11:42:03.0011750Z >>> pnpm lint:room-layout
2026-05-10T11:42:03.3267356Z 
2026-05-10T11:42:03.3268602Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-10T11:42:03.3269918Z > node tools/scripts/lint-room-layout.mjs
2026-05-10T11:42:03.3270534Z 
2026-05-10T11:42:03.3631585Z lint-room-layout: OK
2026-05-10T11:42:03.3778557Z 
2026-05-10T11:42:03.3779446Z === ADR 0004 lint ===
2026-05-10T11:42:03.3780274Z >>> pnpm lint:adr:0004
2026-05-10T11:42:03.7274732Z 
2026-05-10T11:42:03.7275853Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-10T11:42:03.7278560Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-10T11:42:03.7279720Z 
2026-05-10T11:42:03.7604599Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-10T11:42:03.7731118Z 
2026-05-10T11:42:03.7731965Z === Drizzle: emit-check ===
2026-05-10T11:42:03.7732862Z >>> pnpm db:emit-check
2026-05-10T11:42:04.0997363Z 
2026-05-10T11:42:04.0998734Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-10T11:42:04.1006868Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-10T11:42:04.1009571Z 
2026-05-10T11:42:04.6078767Z No config path provided, using default 'drizzle.config.ts'
2026-05-10T11:42:04.6081417Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-10T11:42:05.0568299Z 8 tables
2026-05-10T11:42:05.0569354Z accounts 8 columns 1 indexes 0 fks
2026-05-10T11:42:05.0570322Z audit_log 6 columns 0 indexes 2 fks
2026-05-10T11:42:05.0571189Z characters 9 columns 0 indexes 1 fks
2026-05-10T11:42:05.0572127Z inventory_items 4 columns 0 indexes 1 fks
2026-05-10T11:42:05.0573144Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-10T11:42:05.0574156Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-10T11:42:05.0575065Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-10T11:42:05.0575977Z sessions 5 columns 0 indexes 1 fks
2026-05-10T11:42:05.0576560Z 
2026-05-10T11:42:05.0577445Z No schema changes, nothing to migrate 😴
2026-05-10T11:42:05.2484156Z 
2026-05-10T11:42:05.2485012Z === Drizzle: schema-sync ===
2026-05-10T11:42:05.2485848Z >>> pnpm lint:schema-sync
2026-05-10T11:42:05.5791693Z 
2026-05-10T11:42:05.5792341Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-10T11:42:05.5794208Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-10T11:42:05.5795481Z 
2026-05-10T11:42:05.6078648Z OK
2026-05-10T11:42:05.6220518Z 
2026-05-10T11:42:05.6221491Z === Drizzle: source-comments ===
2026-05-10T11:42:05.6222463Z >>> pnpm lint:source-comments
2026-05-10T11:42:05.9526596Z 
2026-05-10T11:42:05.9527686Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-10T11:42:05.9529359Z > pnpm -C packages/db run lint:source-comments
2026-05-10T11:42:05.9530244Z 
2026-05-10T11:42:06.2898125Z 
2026-05-10T11:42:06.2899663Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-10T11:42:06.2901285Z > node scripts/check-source-comments.mjs
2026-05-10T11:42:06.2901971Z 
2026-05-10T11:42:06.3235503Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-10T11:42:06.3476240Z 
2026-05-10T11:42:06.3477047Z === Workspace: test ===
2026-05-10T11:42:06.3478158Z >>> pnpm -r test
2026-05-10T11:42:06.6819808Z Scope: 5 of 6 workspace projects
2026-05-10T11:42:06.6883374Z packages/db test$ vitest run
2026-05-10T11:42:06.6892426Z packages/game-logic test$ vitest run
2026-05-10T11:42:07.2460720Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-10T11:42:07.2475219Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-10T11:42:07.6666952Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-10T11:42:07.9270969Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 20[2mms[22m[39m
2026-05-10T11:42:08.1985133Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:42:08.3217426Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:42:08.4642451Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:42:08.4805757Z packages/game-logic test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:42:08.4834237Z packages/game-logic test: [2m      Tests [22m [1m[32m21 passed[39m[22m[90m (21)[39m
2026-05-10T11:42:08.4835928Z packages/game-logic test: [2m   Start at [22m 11:42:07
2026-05-10T11:42:08.4855622Z packages/game-logic test: [2m   Duration [22m 1.22s[2m (transform 158ms, setup 0ms, import 264ms, tests 55ms, environment 1ms)[22m
2026-05-10T11:42:08.5170280Z packages/game-logic test: Done
2026-05-10T11:42:08.5179185Z packages/protocol test$ vitest run
2026-05-10T11:42:08.5794704Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:42:09.0771867Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-10T11:42:09.4141095Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-10T11:42:09.4309721Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-10T11:42:09.4329560Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-10T11:42:09.4349080Z packages/db test: [2m   Start at [22m 11:42:07
2026-05-10T11:42:09.4360457Z packages/db test: [2m   Duration [22m 2.18s[2m (transform 187ms, setup 0ms, import 1.48s, tests 32ms, environment 1ms)[22m
2026-05-10T11:42:09.4766892Z packages/db test: Done
2026-05-10T11:42:09.5374811Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-10T11:42:09.7160380Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:42:09.9010090Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:42:10.0866110Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:42:10.0919825Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:42:10.0921499Z packages/protocol test: [2m      Tests [22m [1m[32m30 passed[39m[22m[90m (30)[39m
2026-05-10T11:42:10.0922529Z packages/protocol test: [2m   Start at [22m 11:42:09
2026-05-10T11:42:10.0923696Z packages/protocol test: [2m   Duration [22m 1.00s[2m (transform 186ms, setup 0ms, import 315ms, tests 33ms, environment 1ms)[22m
2026-05-10T11:42:10.1203972Z packages/protocol test: Done
2026-05-10T11:42:10.1211104Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-10T11:42:10.1214462Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-10T11:42:10.7089968Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-10T11:42:10.7739915Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-10T11:42:11.9761018Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 57[2mms[22m[39m
2026-05-10T11:42:12.3505169Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-10T11:42:12.5145112Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-10T11:42:12.5248187Z apps/client test: [22m[39mroom_layout signature did not verify — rendering skipped for mvp-lobby 000
2026-05-10T11:42:12.5251682Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 179[2mms[22m[39m
2026-05-10T11:42:12.6922506Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 26[2mms[22m[39m
2026-05-10T11:42:13.0390450Z apps/server test: {"level":40,"time":1778413333014,"pid":3220,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:42:13.0396126Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-10T11:42:13.0795610Z apps/server test: {"level":40,"time":1778413333018,"pid":3220,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:42:13.0802455Z apps/server test: {"level":40,"time":1778413333018,"pid":3220,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:42:13.7664487Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 18[2mms[22m[39m
2026-05-10T11:42:14.0360576Z apps/server test: {"level":30,"time":1778413333994,"pid":3244,"hostname":"runnervmeorf1","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-10T11:42:14.0369474Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 739[2mms[22m[39m
2026-05-10T11:42:14.0394876Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 608[2mms[22m[39m
2026-05-10T11:42:15.0540696Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-10T11:42:15.0543348Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-eZW87h/rebno.db
2026-05-10T11:42:15.0560774Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:42:15.0581618Z apps/server test: [run-migrations] OK
2026-05-10T11:42:15.0685141Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-10T11:42:15.0693854Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-S6kwBB/rebno.db
2026-05-10T11:42:15.0695486Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:42:15.0697624Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-10T11:42:15.0699274Z apps/server test: [run-migrations] OK
2026-05-10T11:42:15.0784562Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:42:15.0787148Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-HNqPOc/rebno.db
2026-05-10T11:42:15.0789947Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:42:15.0791273Z apps/server test: [run-migrations] OK
2026-05-10T11:42:15.0826783Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:42:15.0839123Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-HNqPOc/rebno.db
2026-05-10T11:42:15.0841644Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:42:15.0844152Z apps/server test: [run-migrations] OK
2026-05-10T11:42:15.0926199Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 57[2mms[22m[39m
2026-05-10T11:42:15.1152516Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-10T11:42:15.4305879Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-10T11:42:15.6804673Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:42:15.9964722Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 25[2mms[22m[39m
2026-05-10T11:42:16.2450367Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:42:16.4066161Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 124[2mms[22m[39m
2026-05-10T11:42:17.1203991Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-10T11:42:17.1214433Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌘ multiple files { path: ['.env.local', '.env'] }
2026-05-10T11:42:17.1216511Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-10T11:42:17.7879781Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 147[2mms[22m[39m
2026-05-10T11:42:17.9256904Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:42:17.9390027Z apps/server test: [2m Test Files [22m [1m[32m11 passed[39m[22m[90m (11)[39m
2026-05-10T11:42:17.9429406Z apps/server test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-10T11:42:17.9458938Z apps/server test: [2m   Start at [22m 11:42:10
2026-05-10T11:42:17.9489698Z apps/server test: [2m   Duration [22m 7.21s[2m (transform 514ms, setup 0ms, import 3.69s, tests 986ms, environment 2ms)[22m
2026-05-10T11:42:17.9872483Z apps/server test: Done
2026-05-10T11:42:18.6138714Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-10T11:42:19.4066027Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 81[2mms[22m[39m
2026-05-10T11:42:20.1365189Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:42:20.8447277Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:42:21.5598103Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-10T11:42:22.2826035Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 26[2mms[22m[39m
2026-05-10T11:42:22.9974398Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:42:23.7203512Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:42:24.4456134Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:42:25.1552672Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:42:25.8833838Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:42:25.9088791Z apps/client test: [2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
2026-05-10T11:42:25.9103318Z apps/client test: [2m      Tests [22m [1m[32m98 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (102)[39m
2026-05-10T11:42:25.9118190Z apps/client test: [2m   Start at [22m 11:42:10
2026-05-10T11:42:25.9120006Z apps/client test: [2m   Duration [22m 15.13s[2m (transform 598ms, setup 59ms, collect 956ms, tests 659ms, environment 8.54s, prepare 1.78s)[22m
2026-05-10T11:42:26.0560218Z apps/client test: Done
2026-05-10T11:42:26.0669427Z 
2026-05-10T11:42:26.0670230Z === Traceable-reqs: check ===
2026-05-10T11:42:26.0671015Z >>> pnpm trace:check
2026-05-10T11:42:26.3945777Z 
2026-05-10T11:42:26.3946387Z > rebno@0.0.0 trace:check /home/runner/work/rebno/rebno
2026-05-10T11:42:26.3946813Z > traceable-reqs check
2026-05-10T11:42:26.3947015Z 
2026-05-10T11:42:26.3986413Z sh: 1: traceable-reqs: not found
2026-05-10T11:42:26.4115234Z  ELIFECYCLE  Command failed.
2026-05-10T11:42:26.4325422Z 
2026-05-10T11:42:26.4326703Z verify-phase-4 FAILED at step 'Traceable-reqs: check': pnpm trace:check (exit 1)
2026-05-10T11:42:26.4328494Z Fix the failing step and re-run `pnpm verify:phase-4`.
2026-05-10T11:42:26.4496171Z  ELIFECYCLE  Command failed with exit code 1.
2026-05-10T11:42:26.4705264Z ##[error]Process completed with exit code 1.
